3.06. Redis
Разработчику
Аналитику
Тестировщику
Архитектору
Инженеру
Redis
STRING, LIST, SET, HASH, ZSET (Sorted Set)
Короткие структуры (ziplist, intset)
Упаковка данных в STRING
Пайплайны (Pipelining): Как группировка команд в один сетевой запрос может кардинально повысить производительность.
Серверные скрипты: Как Lua позволяет выполнять сложную логику прямо на стороне сервера Redis, атомарно и с высокой производительностью.
Построение компонентов - автозаполнение, распределенные блокировки, семафоры, очереди задач (FIFO, отложенные), системы обмена сообщениями (pull/push), распределение файлов.
Репликация (Master/Slave)
Сохранение данных (Persistence): Разница между RDB (снимки) и AOF (журнал), их плюсы, минусы и настройки.
Шардирование (Sharding)
Redis = Remote Dictionary Server — буквально «удалённый сервер словаря»
распределённое хранилище типа ключ → значение, к которому можно обращаться по сети.
Название подчёркивает идею удалённого доступа к структурам данных, как к словарю (ассоциативному массиву).
Резидентная СУБД. Резидентная — означает, что данные постоянно находятся в оперативной памяти (RAM) во время работы.
Redis — это in-memory data store: все данные хранятся в RAM для максимальной скорости доступа. Однако Redis не теряет данные при перезапуске, если включена персистентность (RDB/AOF) — так что это не просто временное хранилище. Правильнее говорить: «In-memory data structure store» — так Redis себя называет официально.
Хотя часто используется как кэш, Redis может быть:
Основной базой данных (если данные помещаются в RAM).
Брокером сообщений (через PUB/SUB, Streams).
Хранилищем сессий, очередей, временных данных.
Поддерживает реальное время: например, онлайн-чаты, уведомления, активность пользователей.
Помимо базовых типов, Redis поддерживает:
HyperLogLog — для оценки уникальных значений (например, уникальные посетители).
Bitmaps — эффективное хранение бинарных флагов (например, активность пользователя по дням).
Geospatial indexes — работа с географическими координатами (GEOADD, GEORADIUS).
Streams — логи событий в реальном времени (аналог Kafka в миниатюре).
JSON — через модуль RedisJSON, теперь можно хранить и запрашивать JSON-объекты.
Vectors — для работы с эмбеддингами в AI/ML (поиск по схожести текстов, изображений и т.п.).
Redis можно расширять с помощью модулей:
RedisJSON — работа с JSON.
RediSearch — полнотекстовый поиск и индексация.
RedisAI — выполнение ML-моделей прямо в Redis.
RedisGraph — графовая база данных.
RedisBloom — фильтры Блума, Count-Min Sketch.
Кластеризация и высокая доступность
Redis Cluster — встроенная поддержка шардирования и отказоустойчивости.
Автоматическое распределение ключей по нодам.
Поддержка master-slave репликации внутри кластера.
Переключение на реплику при падении мастера (failover).
На сайте: "Automatically split your data across multiple nodes to improve uptime."
Active-Active Geo-Distribution (CRDT)
Через Redis Enterprise доступна мультимастерная репликация между дата-центрами.
Данные синхронизируются в реальном времени между регионами.
Гарантируется локальная задержка <1 мс и 99.999% uptime.
Полезно для глобальных приложений (SaaS, fintech, e-commerce).
Производительность и масштабируемость
Все операции — в памяти → микросекундная задержка.
Поддерживает десятки тысяч операций в секунду на одном узле.
Горизонтальное масштабирование через шардирование (ручное или кластер).
Поддержка pipelining и массовых команд (MGET, MSET) — снижает сетевые задержки.
Работа с окружениями и облачными платформами
Как указано на redis.io: работает с:
AWS, Google Cloud, Azure
Kubernetes, Docker
Vercel, Heroku
Можно развернуть:
On-premise (свои серверы)
В облаке (Redis Cloud, Amazon ElastiCache, Azure Cache for Redis)
В контейнерах
Lua-скрипты: атомарность и скорость
Lua-скрипты выполняются атомарно — никакие другие команды не вклиниваются.
Полезно для:
Условных операций («если X, то Y»).
Реализации сложной логики без сетевых задержек.
Атомарных транзакций (аналог MULTI/EXEC, но мощнее).
Пример: реализация rate-limiting (ограничение запросов) за один вызов.
Транзакции (MULTI/EXEC)
Redis поддерживает простые транзакции:
MULTI — начинает блок команд.
EXEC — выполняет все команды атомарно.
Но: нет rollback, если одна команда упадёт.
Лучше использовать Lua-скрипты для сложной логики.
Pub/Sub и Streams — брокер сообщений
PUB/SUB — простая модель publish-subscribe (один-ко-многим).
Используется для чатов, уведомлений.
Минус: нет сохранения сообщений (если подписчик offline — пропустит).
Redis Streams — более продвинутый аналог:
Хранит историю сообщений.
Поддерживает группы потребителей (consumer groups).
Аналог Kafka, но проще и легче.
Безопасность
Поддержка:
Парольной аутентификации (requirepass).
Шифрования (TLS/SSL) — в новых версиях.
ACL (Access Control Lists) — с версии 6.0:
Разные пользователи с разными правами.
Например: readonly-пользователь для кэша, admin — для управления.
Инструменты и экосистема
RedisInsight — официальный GUI от Redis Inc.
Визуализация данных, мониторинг, отладка, работа с JSON, поиск.
Поддержка Redis Stack (все модули).
CLI (redis-cli) — мощный интерактивный клиент.
Клиентские библиотеки:
Python: redis-py
Node.js: ioredis, node-redis
Java: Jedis, Lettuce
Go: go-redis
.NET: StackExchange.Redis
Redis Stack
Сборка от Redis Inc., включающая:
Redis + модули (JSON, Search, AI, Bloom, Timeseries).
RedisInsight.
CLI и SDK.
Позволяет быстро строить приложения с полнотекстовым поиском, AI, аналитикой.
Интеграция с AI
Как указано на сайте: "Build AI apps with more speed, memory, and accuracy."
Redis используется в AI-приложениях для:
Хранения эмбеддингов (векторов).
Поиска по схожести (similarity search).
Кэширования ответов LLM.
Хранения контекста диалога.
Интеграция с LangChain, LlamaIndex и др.
Производительность vs. SQL
SQL-базы: медленнее, потому что данные на диске, нужен парсинг запросов, транзакции, индексы.
Redis: всё в RAM → быстрее в 10–1000 раз.
Но: ограничен объёмом памяти, нет JOIN’ов, сложных запросов.
Идеален для горячих данных, которые нужны постоянно.
★ Redis хранит данные в виде ключ-значение, причём в оперативной памяти (RAM), поэтому он очень быстрый. Это идеальный пример механизма кэширования. Применяется в кэшировании (ускорении сайтов), сессиях пользователей, очередях задач, чат-приложений, чтобы обеспечить высокую скорость работы, не обращаться лишний раз к SQL, так как хранилище SQL хранится на диске, и при каждом запросе идёт чтение с диска.
Ключ — это строка (например, user:1000).
Значение может быть различных типов:
- Строка (string):
"JohnDoe". - Хэш (hash):
{"name": "John", "age": 30}. - Список (list):
["task1", "task2", "task3"]. - Множество (set): уникальные элементы, например,
{"apple", "banana", "cherry"}. - Упорядоченное множество (sorted set): элементы с приоритетами, например,
{("task1", 1), ("task2", 2)}.
Создание данных:
SET user:1000 "Solid Snake"
Чтение данных:
GET user:1000
Обновление данных:
SET user:1000 "Big Boss"
Удаление данных:
DEL user:1000
Redis также поддерживает персистентность (сохранение данных на диск):
- RDB (Redis Database File) : создание моментальных снимков данных через определённые интервалы.
- AOF (Append-Only File) : запись всех операций в файл для восстановления данных после перезапуска.
Устанавливается Redis как на Windows, так и на Linux.
Для администрирования используются графические инструменты:
- RedisInsight (официальный GUI, в комплекте);
- Another Redis Desktop Manager.
Специальные фреймворки и библиотеки для работы – ioredis, redis-py, Jedis и другие.
Redis часто используется как кэш для ускорения веб-приложений, к примеру в JavaScript можно работать с таким кэшем:
const redis = require('redis');
const client = redis.createClient();
// Проверяем, есть ли данные в кэше
client.get('user:1000', (err, data) => {
if (data) {
console.log('Данные из кэша:', data);
} else {
// Если данных нет, получаем их из базы данных
const userData = { name: 'Max', age: 30 };
client.set('user:1000', JSON.stringify(userData));
console.log('Данные сохранены в кэш');
}
});
Redis можно использовать для управления очередями задач, для хранения сессий в веб-приложениях, для реализации чатов. Он также поддерживает аутентификацию через пароль, репликацию (копирование данных между серверами) и шардирование (разделение данных между несколькими узлами). Все операции выполняются атомарно, что гарантирует целостность данных.
Официальный сайт Redis - https://redis.io/
Чит-лист - https://cheatsheets.zip/redis